package com.vvv.designpattern.dprecated.state.service;

import com.vvv.designpattern.dprecated.state.DeprecatedOrder;
import com.vvv.designpattern.dprecated.state.DeprecatedOrderContext;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @author vvv
 * @date 2023-11-20 11 44
 * discription
 * service里面主要做的是转移操作？
 *
 * 比如pay方法：
 * pay方法里面，假如支付成功，那么才去调用deprecatedOrderContext.payOrder(orderId);
 * 那么这个.payOrder(orderId); 相对于spring状态机里面的订单操作枚举类
 * 调用这个deprecatedOrderContext.payOrder(orderId);方法 相对于想spring状态机发了一个event，
 * 告诉spring状态机，我要从待支付状态 -> 待发货状态
 */
@Service
public class DeprecatedOrderService {

    @Resource
    private DeprecatedOrderContext deprecatedOrderContext;

    public DeprecatedOrder createOrder(String productId) {
        // TODO 全局id，这里简写，具体可以看黑马点评的RedisIdWorker类
        String orderId = "OID" + productId;
        return deprecatedOrderContext.createOrder(orderId, productId);
    }

    public DeprecatedOrder pay(String orderId) {
        return deprecatedOrderContext.payOrder(orderId);
    }

    public DeprecatedOrder send(String orderId) {
        return deprecatedOrderContext.sendOrder(orderId);
    }

    public DeprecatedOrder receive(String orderId) {
        return deprecatedOrderContext.receiveOrder(orderId);
    }
}
